import axios from 'axios'
import {
  Message
} from 'element-ui'
import store from '@/store'
import router from '@/router'
import {
  getToken
} from '@/request/token'

const service = axios.create({
  baseURL: process.env.BASE_API,
  // baseURL: "http://localhost:80/api/",
  timeout: 10000
})

//request拦截器
// step6：请求拦截器，如果 state中的token有值，则在本次请求的头部追加 token
service.interceptors.request.use(config => {
  if (store.state.token) {
    config.headers['apiToken'] = getToken()
  }
  //返回给楼上的service，交给 axios发一个请求给后端
  return config
}, error => {
  Promise.reject(error)
})

// step7：通过axios接收到后端返回来的json数据（response），对请求超时、状态码进行拦截
// 接收返回成功了则返回 response.data
// 失败则执行 Promise对象的 reject(error)
// respone拦截器
service.interceptors.response.use(
  response => {

    //全局统一处理 Session超时
    if (response.headers['session_time_out'] == 'timeout') {
      store.dispatch('fedLogOut')
    }

    const res = response.data;

    // Step8：请求拦截器，过滤请求，若成功则返回 response.data
    //200 为成功状态
    if (res.code !== 200) {

      if (res.code === 90001) {
        return Promise.reject('error');
      }

      //31001 用户未登录
      if (res.code === 31001) {

        Message({
          type: 'warning',
          showClose: true,
          message: '未登录或登录超时，请重新登录哦'
        })
        setTimeout(() => {
          router.push('/');
        }, 2000)

        return Promise.reject('error');
      }

      //70001 权限认证错误
      if (res.code === 70001) {
        console.info("权限认证错误")
        Message({
          type: 'warning',
          showClose: true,
          message: '你没有权限访问哦'
        })
        return Promise.reject('error');
      }

      return Promise.reject(res.msg);
    } else {
      return response.data;
    }
  },
  error => {
    Message({
      type: 'warning',
      showClose: true,
      message: '连接超时'
    })
    return Promise.reject('error')
  })

export default service
